package cn.lhjl.day08.note;
/*
* JDBC：
* 概念：java DateBase Connectivity 数据库连接，java语言操作数据库
* JDBC本质：其实是官方（sun公司）定义的一套操作所有关系型数据库的规则，即接口。各个数据库厂商去实现这套接口，提供数据库jar包。
* 我们可以使用这套接口（JDBC）编程，正正执行的代码是驱动jar包中的实现类。
*
* 快速执行次JDBC编程步骤
*
* 1导入驱动jar包
* 找到在oracle文件夹下找到oracle的jar包：ojdbc14.jar，复制到工程新建的lib文件夹下，右键add as libra
* 2.注册驱动：class.forName("oracle.jdbc.driver.OracleDriver");
* 3.获取数据库连接对象： Connection conn = DriverManager.getConnection(url,user,password)
* 4.定义sql语句
* 5.获取执行sql语句的对象Statement stmt = conn.createStatement;
* 6.执行sql语句并接受返回值：int count = stmt.方法（参数）;
* 7.处理结果(例如打印)
* 8.释放资源：stmt.close;
*            conn.close;
*
* 以下为一个执行update更新语句的示例:
*
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Collection conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.210.129:1521:XE", "HR", "123456");
        String sql ="update Student set sage=19 where sname='张三'";
        Statement stmt = conn.createStatement();
        int i = stmt.executeUpdate(sql);
        System.out.println(i);
        stmt.close();
        conn.close();

* 详解JDBC中用到的各个对象：
* 1.DriverManager：驱动管理对象
*   功能：
*           1.注册驱动：告诉程序该使用哪种数据库驱动jar包
*           写代码时使用Class.forName(oracle.jdbc.driver.OracleDriver);,通过查看源码我们发现，OracleDriver中
*           有一个静态代码块，调用了DriverManager.registerDriver方法。实质上还是在调用DriverManager的静态方法。
*           2.获取数据库连接：
*            方法：static Connection getConnection（String url，String user,String password）
*            url：指定连接路径
*               语法：jdbc:oracle:thin:@ip地址:端口号:数据库名称。例如：jdbc:oracle:thin@192.168.210.129:1512:XE
*
* 2.Connection：数据库连接对象
* 功能：
*       1.获取执行sql的对象
*           1.Statement createStatement()
*           2.PreparedStatement prepareStatement(String sql)
*       2.管理实务
*           1.开启事务 setAutoCommit（boolean autoCommit）:调用该方法设置参数为false，即开启事务。
*           2.提交事务：commit（）
*           3.回滚事务：rollback()
* 3.Statement：执行sql的对象
* 功能：
*       1.执行sql语句
*           1.boolean execute(String sql):可执行任意的sql 了解
*           2.int executeUpdate（String sql）：执行DMl(insert,update,delete)语句，DDl（create，alter，drop）语句
*               返回值：影响的行数，可以通过这个影响的行数判断DML，返回值>0的执行成功，反之失败
*           3.Result executeQuery（Sting sql）：执行DQL（数据库查询）语句
* 4.ResultSet：结果集对象，封装查询结果
* 功能：
*       1.next(): 游标向下移动一行，默认在第一行数据上面，判断当前行是否超出有效数据行，如果是，返回false，否则翻了会true
*       2.getXxx(参数)：获取数据
*           Xxx：代表要获取的数据类型 如int，String
*           参数（int和String两者重载）：
*                   1.int 代表列的编号，从1开始
*                   2.String 代表列的名称。
*
*         使用游标来遍历整张表：
*               只用步骤：
*                           1.将游标向下移动一行
*                           2.判断是否有数据
*                           3.获取数据。
*
*
*
*
*
*
* 5.PreparedStatement：执行sql对象,解决了sql注入问题
* 步骤（相比之前用Statement的变更）：
*       1.获取PreparedStatement对象，此时就传sql了，PreparedStatement pstmt= conn.preparedStatement
*       2.为?赋值，pstm.setXxx(参数1，参数2)，参数1为第一个问好，参数2为传入的值。
*       3.执行sql，接收结果，此时就不用在传sql语句了。
*
*
*
*
*
*
* Demo1中，直接把异常抛出，会导致一个结果，程序末尾的close()语句没有得到执行，而实际情况是我们希望无论程序是否持续成功，
* 资源都应该被释放，所以换成try catch写法如Demo2.
* Demo2实现插入
* Demo3实现更改
* Demo4实现创建表
* Demo5实现数据库查询基础
* Demo6实现用游标遍历查询
* Demo7实现结果集的集合返回
*
*
*
*
*
*
*
*
*
*
*
* */
public class JDBC {
}
